// 封装请求
// 指定后端返回的基本数据类型
var CodeConfig = {
  /**
   * 接口错误信息
   */
  // code fail
  CodeFail: 0,
  // code success
  CodeSuc: 1,
  // request param error
  CodeParamError: 1001,
  // account is exist
  CodePhoneExist: 1002,
  // server internal error
  CodeServerError: 1003,
  // token expired
  CodeTokenExpired: 1004,
  // user not exist
  CodeUserNotExist: 1005,
  // password error
  CodePasswordError: 1006,
  // article not exist
  CodeArticleNotExist: 2000,
};

// 参数排序
function sortKey(s1, s2) {
  if (s1 < s2) {
    return -1;
  }
  if (s1 > s2) {
    return 1;
  }
  return 0;
}

// 参数排序
function getSortObj(originData) {
  var originKeys = Object.keys(originData);
  var sortKeys = originKeys.sort(sortKey);
  var sortObj = sortKeys.reduce(function (p, n) {
    return Object.assign({}, p, { [n]: originData[n] });
  }, {});
  return sortObj;
}

var defaultOption = {
  headers: {
    Authorization: "",
    token: "",
  },
};

var fetch = function (url, options) {
  const { $router, $config } = useNuxtApp()

  console.log($config.public.globalAPI.url)

  const reqUrl = url; // 获取全局的baseUrl

  var p = Object.assign({}, defaultOption, options);

  // 加密参数
  var originData = options.body || options.params || {};
  var sortData = getSortObj(originData);

  var paramsData = JSON.stringify(sortData);
  if (p.method === "get") {
    p.params = sortData;
  } else {
    p.body = JSON.stringify(sortData);
    paramsData = JSON.stringify(sortData);
  }

  // p.headers.Authorization = Token ? "Bearer " + Token : "";
  // p.headers.token = Token || "";

  return new Promise(function (resolve, reject) {
    $fetch(reqUrl, p)
      .then(function (res) {
        resolve(res);
        //   var code = res.code || 0;
        //   if (code === CodeConfig.CodeSuc) {
        //     // 成功
        //     resolve(res);
        //     return;
        //   }

        //   if (code === CodeConfig.CodeTokenExpired) {
        //     // token过期
        //     $router.replace({ path: '/' });
        //     reject(res);
        //     return;
        //   }

        //   if (code !== CodeConfig.CodeSuc) {
        //     reject(res);
        //     return;
        //   }
      })
      .catch(function (err) {
        reject(err);
      });
  });
};

var requestMethods = {
  get: function (url, params) {
    return fetch(url, { method: "get", params });
  },
  post: function (url, body) {
    return fetch(url, { method: "post", body });
  },
};

export default requestMethods;
